分类
联系方式
  1. 新浪微博
  2. E-mail

Maxiee Weekly No.1 20220617

文章

  1. 《一篇带你走近Kubernetes概貌与原理》
    1. 庞大的工具体系:运维保障、弹性调度、故障自愈等功能
    2. POD
      1. 最小单元,对容器层封装
      2. Docker 容器 or containinerd 容器……
      3. POD 内共享网络空间、hostname、存储
    3. 基于 Pod 的控制器
      1. 作用:调度 Pod 并运行其中容器
      2. Deployment:服务类、Web 类
      3. StatefulSet:为有状态服务设计
      4. Job、CronJob
    4. 调度策略:调度策略非常强大
    5. 高可用、故障自愈:
      1. 副控制器,复制 Pod 形成副本集
      2. deployment:自动检测实例数,拉新的,清挂的
    6. 容器检测探针:
      1. HTTP_GET 探针:正常返回表示服务正常
      2. TCP_SOCKET:TCP 连接判断存活
      3. exec:通过命令判断是否存活
    7. K8S 统一存储:
      1. PV:持久化存储
        1. 具体技术(Ceph、GlusterfS、LocalStorage)
      2. PVC:持久化存储声明
  2. 《Flutter For Web 编译的两种方案》
    1. Flutter Web 最初两套方案:
      1. HTML + CSS + Canvas:兼容性好,性能差
      2. CSS Paint API:性能好,兼容性不好,不支持文本
    2. 两个编译器:
      1. dart2js
        1. 发布时选择,tree-shaking 减小包大小
        2. 优化目标:编译后 JS 比手写的还快
      2. dartdevc
        1. 开发时选择,支持增量编译
    3. dart2jsSnapshot:
      1. 优化等级,o0~o4,减小产物大小,优化性能
    4. web 产物目录:
      1. assets 资源
      2. flutter_service_worker.js:多线程优化缓存,提升加载速度
      3. index.html:网页入口
      4. main.dart.js:应用代码
  3. 《opengl-tutorial》
    1. 一个 OpenGL 教程网站
    2. 这份教程比较适合新手入门,无需预备知识
    3. 用“傻瓜式C++”实现代码,代码中没有模板、类、指针。即使只懂 Java 也能理解代码。
  4. 《把玩飞镖:Dart VM 集成入门》
    1. 将 DartVM 嵌入任何项目,像 Flutter 那样
    2. Dart 代码执行模式
      1. 二进制 AST(Kernel Binary)JIT 执行
      2. 预热快照(AppJIT)JIT 执行
      3. AOT 快照(AppAOT)AOT 执行
    3. Dart 代码执行场景:
      1. 桌面 dart 命令:
        1. CFE 通用前端,.dart 编译为二进制 AST
        2. 在主 Isolate JIT 执行
        3. 对应模式1
      2. 桌面 dart --snapshot-kind=app-jit
        1. .dart 源码 JIT 执行,保存虚拟机状态快照 .snapshot
        2. 快照:VM 快速恢复现场,优化启动性能
        3. 举例:flutter run,直接加载 flutter_tools.snapshot 快照
        4. 对应模式2
      3. 桌面执行 dart2native:
        1. Dart 源码直接编译成机器码 .aot
        2. 类似原生 ELF 可执行格式
        3. 可以被预编译出的 dart_precompiled_runtime 动态加载执行
        4. 对应模式3
      4. 移动端 Flutter Debug:
        1. dart 源码桌面端被编译成 .dill 的 Kernel Binary
        2. .dill 通过 RPC 动态更新到设备上
        3. Flutter 增量编译、热重载的基础
        4. 对应模式1变体
      5. 移动端 Flutter Release:
        1. dart 源码桌面端被交叉编译成 ARM 机器码
        2. 与预编译的运行时相连
        3. 对应模式3变体
    4. Flutter Release 为什么用 AOT 编译?
      1. AOT 并不一定强过 JIT,Java 为例
      2. 主要是满足 IOS 禁用 JIT 的政策限制
      3. 匹配移动端场景:性能快速释放,包体积
    5. 编译 DartVM 静态库
      1. Dart 没提供库编译模式,需要打 patch,Embedder Example
      2. 作者 Dart 团队的 Vyacheslav Egorov,大神
      3. 对应 gn 配置及编译方式
      4. 静态库及头文件拷出
    6. C++ 启动 DartVM
      1. dart::embedder::InitOnce 之后 Dart_Initialize
      2. Dart_CreateIsolateGroupFromKernel 加载 Kernel Binary,创建 Isolate
      3. 启动 Dart_RunLoop ,正式执行 Dart 代码
    7. iOS 接入 DartVM:加载 .dill 并运行
  5. 《说说 Flutter:Skia、Dart 及其历史》
    1. RIA (Rich Internet Application)
      1. YUI、dojo、ExtJS、Google Web Toolkit (GWT)
      2. 让 JavaScript 有开发复杂业务应用的能力
      3. Web2.0 黄金时代
    2. Google Web Toolkit
      1. 编程语言是 Java,编译成 JavaScript
      2. Chrome/V8 尚未出现,IE 仍为主流
      3. 2011 年落了数百个项目:Blogger、Map、AdWords、Inbox
    3. Dart
      1. 2011 年发布,部分成员来自 GWT
      2. Java2JavaScript 改为 Dart2JavaScript
    4. 迁移 Flutter 技术栈
      1. 新技术栈是团队推进关键阻碍
        1. 更尴尬的是,Dart 语言只此一家再用,对开发者不实惠
        2. 好处是进入成本也不高,Algol 系语言结构一脉相承
        3. 看团队成员的能力和接受程度
      2. Google 提供了足够丰富的工具支撑,Google 注重工程实践能力
    5. Flutter 发展力度
      1. 正式版,稳定性有保障
      2. Fuchsia 默认 UI 框架,Google 技术投入足够
      3. 文档生态都比较丰富
  6. 《React Native Skia—For Us, For You, and For Fun — Mobile (2022)》
    1. 由 Shopify 团队推出
    2. 支撑 Chrome、Android、Flutter 底层的核心基建是 Skia
    3. Skia 是一个跨平台绘制库:iOS、Android、macOS、Windows、Linux
    4. React Native Skia 是用 Skia 作为 RN 的底层渲染库,意义
      1. 解决 React Native 绘制性能低下的短板
      2. 新型 UI 设计工具:设计即 UI
    5. 基于 React Native 新架构的 JSI,JS 直接调用 C++,不再通过事件队列
    6. API 设计:
      1. 与 Flutter Skia 绘制 API 100%兼容,复用 API 的良好设计
      2. 提供 react-native-web 的 Skia 支持,通过 CanvasKit
        1. CanvasKit 是将 Skia 编译成 WebAssembly,由 Flutter Web 提出
    7. 采用声明式 UI,通过 React Reconciler 进行 Diff,将实际绘制开销最小化
    8. 提供了丰富的 API 接口:图片滤镜、shaders、SVG、路径操作、vertices、文本布局
    9. 未来演进:已经有人在基于 Skia 构建下一代的 React Native UI,也就是说,未来 React Native 也有自渲染方案了
  7. 《MongoDB全方位知识图谱!》
    1. 高可用、分布式、灵活设计
    2. NoSQL:No Schema,BSON 格式,好处:
      1. 复杂领域建模能力更强
      2. 易于开发迭代
      3. 降低运维成本
    3. 高可用:
      1. 复制集群:Primary、Secondary、Arbiter
      2. 保证数据一致性:Journal日志、Oplog、Checkpoint、节点选举
    4. 集群扩展:
      1. 数据均衡:rebalance
      2. 分片算法:区间分片、hash分片
    5. 自带数据压缩:
      1. 压缩之后再落盘
      2. 压缩算法:
        1. Snappy:默认,压缩比 3~5倍
        2. Zlib:5~7倍
        3. 前缀压缩:索引用的压缩算法,丢掉重复前缀
        4. zstd:MongoDB 4.2 新增,压缩率更高
    6. 存储引擎 Wired Tiger:B+Tree
  8. 《从单机到分布式数据库存储系统的演进》
    1. 字节跳动技术团队
    2. 三类主流存储产品:
      1. 块存储:低时延、高吞吐
      2. 对象存储:存视频、图片、音频非结构化数据,成本优先
      3. 文件系统:遵循 POSIX 语义,开源分布式实现多
    3. 单机数据库存储:
      1. B+ 树,内存效率高,磁盘效率高,数据结构统一
      2. 瓶颈:容量,扩容缩容,转录成本高
    4. 分布式数据库存储方案:
      1. MyRocks:RocksDB 替代 InnoDB
      2. Amazon Aurora
      3. Shared-Nothing
    5. 自研 veDB:
      1. 弹性:随时弹性扩缩容
      2. 易用性:兼容主流数据库(PostgreSQL、Mongo……)
      3. 极致性价比、极致可靠性
    6. 未来演进:
      1. HTAP/HSAP:实时
      2. AI Enhancement:调参、智能格式转换
      3. 硬件方向:
        1. 存储介质变革:SSD 往 persistent memory 转变
        2. 计算单元变革:多核处理器
        3. 网络设施:RDMA
  9. 《独立开发变现周刊(第58期):预售CSS课程,卖出55万美元》
    1. 公开分享开发过程:Gif、内容、预览,获取早期关注
    2. 不想成长得太快。Paul Jarvis的《Company of One》的粉丝,对为了发展而发展并不感兴趣。
  10. 《李永乐老师这个讲座关系到每一个人!房贷提前还款会不会吃亏?值得大家好好看看!》

读书

《一人公司起步的思维挑战》:

  • 每个人都要走出自己的路,符合自己价值观的路,这才是真正有意义的人生。
  • 应该由内在的价值驱动,别让外部价值影响你的人生。很多时候我们受外在因素诱导,追逐金钱、名利、声望,但过程中丧失了真正的自由,迷失了自己。

主题项目

每周我会给自己出一个项目的题目来完成。本周题目是 Flutter 引擎的自动化编译脚本。

Flutter 引擎自身比较庞大,代码拉取、编译都比较繁琐,我希望能够简化一下编译流程,实现一键自动化编译。

项目名称:flutter_engine_auto_compile_scripts

日常迭代